package com.tosit.bmx.common.speech;

import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import org.json.JSONObject;

import java.io.IOException;

/**
 *  @author tsl
 * @date 2018/4/16 18:16
 */
public class SpeechUtil {
    /**
     * 根据字符串生成音频
     *
     * @author tsl
     * @date 2018/4/16 18:23
     * @param tranlate                  生成音频的文字
     * @param outFilePath               存放的路径
     * @param connectionTimeoutInMillis 连接超时时间
     * @param SocketTimeoutInMillis     等待响应超时时间
     */
    public static void createVoice(String tranlate, String outFilePath, Integer connectionTimeoutInMillis, Integer SocketTimeoutInMillis) {
        AipSpeech client = MyAipSpeech.getAipSpeech();
        // 可选：设置网络连接参数
        setAipSpeech(client, connectionTimeoutInMillis, SocketTimeoutInMillis);
        // 调用接口
        saveToFile(tranlate, outFilePath, client);
    }

    /**
     * 根据字符串生成音频
     * @author tsl
     * @date 2018/4/16 18:23
     * @param tranlate    生成音频的所需文字
     * @param outFilePath 存放的路径
     */
    public static void createVoice(String tranlate, String outFilePath) {
        AipSpeech client = MyAipSpeech.getAipSpeech();
        // 设置网络连接参数
        setAipSpeech(client, 2000, 6000);
        // 生成音频文件
        saveToFile(tranlate, outFilePath, client);

    }

    /**
     * 根据字符串生成音频文件
     * @author tsl
     * @date 2018/4/16 18:23
     * @param data        生成音频的所需文字
     * @param outFilePath 存放的路径
     * @param client      生成音频的客户端
     */
    private static void saveToFile(String data, String outFilePath, AipSpeech client) {
        TtsResponse synthesis = client.synthesis(data, "zh", 1, null);
        byte[] data1 = synthesis.getData();
        JSONObject result = synthesis.getResult();
        if (data != null) {
            try {
                Util.writeBytesToFileSystem(data1, outFilePath);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (result != null) {
            System.out.println(result.toString(2));
        }
    }

    /**
     * 设置网络连接参数
     * @author tsl
     * @date 2018/4/16 18:23
     * @param client                    生成音频的客户端
     * @param connectionTimeoutInMillis
     * @param SocketTimeoutInMillis
     */
    public static void setAipSpeech(AipSpeech client, Integer connectionTimeoutInMillis, Integer SocketTimeoutInMillis) {
        client.setConnectionTimeoutInMillis(connectionTimeoutInMillis);
        client.setSocketTimeoutInMillis(SocketTimeoutInMillis);
        // 可选：设置log4j日志输出格式，若不设置，则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
        System.setProperty("aip.log4j.conf", "log4j.properties");
    }
}
